package com.etcn.common.service;

import java.util.List;

import com.etcn.common.dao.ICrudDao;
import com.etcn.common.pojo.BaseEntity;

/**
 * 增删改查Service接口
 * @author guozc
 * @version 2014-05-16
 */
public interface ICrudService<D extends ICrudDao<T>, T extends BaseEntity<T>> {
	
	/**
	 * 根据id获取单条数据
	 * @param id
	 * @return
	 */
	T getById(long id) throws Exception;
	
	/**
	 * 获取单条数据
	 * @param entity
	 * @return
	 */
	T find(T entity) throws Exception;
	
	/**
	 * 查询数据列表
	 * @param entity
	 * @return
	 */
	List<T> findList(T entity) throws Exception;
	
	/**
	 * 查询数据列表（app使用）
	 * @param entity
	 * @return
	 */
	List<T> findAppList(T entity) throws Exception;
	
	/**
	 * 查询所有数据列表
	 * @return
	 */
	List<T> findAllList() throws Exception;
	
	/**
	 * 插入数据
	 * @param entity
	 * @return
	 */
	void insert(T entity) throws Exception;
	
	/**
	 * 批量插入
	 * @param list
	 */
	void insertBatch(List<T> list) throws Exception;
	
	/**
	 * 更新数据
	 * @param entity
	 * @return
	 */
	void update(T entity) throws Exception;
	
	/**
	 * 根据id更新数据
	 * @param entity
	 * @return
	 */
	void updateById(T entity) throws Exception;
	
	/**
	 * 删除数据
	 * @param entity
	 * @return
	 */
	void delete(T entity) throws Exception;
	
	/**
	 * 根据主键删除
	 * @param id 主键
	 * @throws Exception
	 */
	void deleteById(long id) throws Exception;
	
	/**
	 * 逻辑删除数据(is_deleted字段置为'1')
	 * @param entity
	 * @throws Exception
	 */
	void deleteLogically(T entity) throws Exception;
	
	/**
	 * 根据id逻辑删除数据(is_deleted字段置为'1')
	 * @param entity
	 * @throws Exception
	 */
	void deleteLogicallyById(long id) throws Exception;
}
